<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 数组的基本操作 

        // 1.length属性  
        //  读  
            // 语法: 数组.length
            // 得到: 数组的长度
        //  写 
        //  数组.length = 数字 
        //  赋值的数字 大于数组本来的长度
        //   多出来的 用 empty 补齐
        //  赋值的数字 等于数组本来的长度
        //   相当于没操作 
        //  赋值的数字 小于数组本来的长度
        //   从数组的末尾删除  


        // var arr1 = ['蔡徐坤','杨洋','鹿晗','易烊千玺','王源','王俊凯','白敬亭'];

        // alert(arr1.length); // 7   读
        // 赋值的数字 = 原来数组的长度  
        // console.log('写以前',arr1);
        // arr1.length = 7
        // console.log('写以后',arr1);


        // 赋值的数字 > 原来数组的长度  
            // console.log('写以前',arr1);
            // arr1.length = 11
            // console.log('写以后',arr1); 多出的位置用empty 补齐


        // // 赋值的数字 < 原来数组的长度  
        //     console.log('写以前',arr1);
        //     arr1.length = 3
        //     console.log('写以后',arr1);  // 从后往前删除
        // 2.索引属性 
        // 读
            // 语法 数组[索引]
            // 存在这个索引 得到该索引位置的数据 
            // 不存在这个索引 得到 undefined

        // 写
            // 数组[索引] = 值 
            // 如果数组中存在这个索引 替换原来位置的值  
            // 如果这个索引 跟 数组的长度一样 等同于给数组末尾添加一个元素 
            // 如果这个索引大于数组的长度 中间空出的位置用 empty补齐 
        // 3.数组进行遍历 
            // 三种  
            //   构建索引  根据索引取值  
            //   for var 变量  in 数组
            //   for var 变量  of 数组
            
            





             // 获取指定位置的元素 
            //  var arr1 = ['蔡徐坤','杨洋','鹿晗','易烊千玺','王源','王俊凯','白敬亭'];
            //  console.log(arr1[5])
            //  console.log(arr1[15]);// undefined

            // // 设置的索引 等于数组的长度 

            //  // var arr1 = ['蔡徐坤','杨洋','鹿晗','易烊千玺','王源','王俊凯','白敬亭'];
            // // console.log(arr1);
            // // arr1[7] = '张三';
            // // console.log(arr1);

            // // 设置的索引 大于数组的长度 
            // // var arr1 = ['蔡徐坤','杨洋','鹿晗','易烊千玺','王源','王俊凯','白敬亭'];
            // // console.log(arr1);
            // // arr1[13] = '张三';
            // // console.log(arr1);

            // // 设置的索引 小于数组的长度 
            // // var arr1 = ['蔡徐坤','杨洋','鹿晗','易烊千玺','王源','王俊凯','白敬亭'];
            // // console.log(arr1);
            // // arr1[6] = '安琪拉'
            // // console.log(arr1);


            var wifes = ['苏荃','双儿','方怡','曾柔','阿珂','建宁公主','沐剑萍'];


            // // 1 构建索引 
            // for(var i=0;i<wifes.length;i++){
            //     // i  0 123456 下标
            //     console.log(wifes[i]);
                
            // }

            // 2 for in 
            // for(var k in wifes){
            //     // console.log(k); // 每个元素的索引  0123456
            //     console.log(wifes[k])
            // }

            // 3 for of 
            //  for(var k of wifes){
            //     console.log(k); // 直接得到数组的每个元素 
            // }


            // for  in  for of的区别?

            // for in 用来遍历对象 得到的是对象的键 
            // 也可以遍历 数组  得到的是 数组的下标 

            // for of  可以遍历 数组  字符串  set  map 不能遍历对象 


            // 补充一个小知识点 :

            // 递归函数 为了防止 外边的函数名发生变化 里边调用自己但是忘了改名字
            // 报错  

            // 解决方案 :
            // 调用自己的时候  用 arguments.callee 代替写名字 
            // 以后不管外边函数名怎么变化  自动跟随  
            function anrui(month){
                if(month==1 || month == 2) return 1;
                return arguments.callee(month-1) + arguments.callee(month-2)
            }


            console.log(anrui(10))




    </script>
</body>
</html>